#ifndef CLASS_GOAL_THINK
#define CLASS_GOAL_THINK

#include "goal.h"
#include "goal_evaluator.h"

#include <vector>
#include <pair>

namespace spsu_art {

class goal_think : public goal {
private: 
    //contains all the subgoals of goal think
    std::vector<std::pair<goal*, goal_evaluator*>> subgoals;

    //holds the best goal currently
    goal* current_best_goal;

protected:


public:

   void add_goal(goal* subgoal, goal_evaluator* eval);

   void terminate();
   void activate();

   //this is the top most goal of the hierarchy it makes no since for
   //this thing to return anything. It should try to handle all errors on its own.
   void process();

   bool forward_message(Telegram& msg); 

   bool static is_composite();

} //end class goal_think

} //end namspace spsu_art

#endif
